package com.demo.java.OD101_150.OD134;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【星际篮球争霸赛】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145726158
 */
public class OdMain {
    // 递归检查是否能够通过选取某些数使得它们的和为 number
    static boolean check(List<Integer> list, int number, int beforeNumber) {
        if (list == null) return true; // 如果列表为空，则返回 true
        if (number == beforeNumber && list.size() == 0) return true; // 特定条件下返回 true

        boolean statu = false; // 状态标志，记录是否找到符合条件的子集
        for (int i = 0; i < list.size(); ++i) {
            List<Integer> mySubList = new ArrayList<>(); // 剩余的元素集合
            for (int j = 0; j < list.size(); ++j) {
                if (i != j) {
                    mySubList.add(list.get(j)); // 构造不包含当前元素的子集
                }
            }
            // 如果当前元素等于目标值，则进行递归检查
            if (list.get(i) == number) {
                statu = statu || check(mySubList, beforeNumber, beforeNumber);
            } else if (list.get(i) < number) {
                statu = statu || check(mySubList, number - list.get(i), beforeNumber); // 尝试将当前元素从目标值中减去
            }
        }
        return statu; // 返回是否找到符合条件的子集
    }

    public static void main(String[] args) {
        try {
            Scanner scan = new Scanner(System.in);
            int t = scan.nextInt(); // 读取整数 t
            if (t < 1 || t > 50) { // 检查 t 是否在有效范围内
                System.out.println("input error");
                return;
            }

            int[] scoreArray = new int[t]; // 创建一个整数数组存储分数
            for (int i = 0; i < scoreArray.length; ++i) {
                scoreArray[i] = scan.nextInt(); // 读取分数
            }

            int reult = 0; // 总和变量
            List<Integer> list = new ArrayList<>(); // 创建列表用于存储分数
            for (int p : scoreArray) {
                reult += p; // 计算分数总和
                list.add(p); // 将分数添加到列表中
            }

            // 遍历从大的可能的 j 值开始，直到找到满足条件的 j
            for (int j = scoreArray.length; j > 0; j--) {
                // 如果总和可以被 j 整除，且 check 方法返回 true，说明可以通过分配分数的方式得到满足条件的数
                if (reult % j == 0 && check(list, reult / j, reult / j)) {
                    System.out.println(reult / j); // 输出符合条件的分数
                    return;
                }
            }

            // 如果没有找到合适的 j 值，则输出总和
            System.out.println(reult);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("input error"); // 捕获异常并输出错误信息
        }
    }
}